home *** CD-ROM | disk | FTP | other *** search
/ Amiga Game-Power / Amiga Game-Power.iso / pd mix i / kampf um eriador / kue.1mbyte (.txt) < prev    next >
AmigaBASIC Source Code  |  1994-05-20  |  26KB  |  897 lines

  1. ' *****************************************************
  2. ' *                                                   *
  3. ' *          K a m p f   u m   E r i a d o r          *
  4. ' *         ---------------------------------         *
  5. ' *         1MB DigiSound-Version / April '88         *
  6. ' *                                                   *
  7. ' *         Programmiert von :                        *
  8. ' *                                                   *
  9. ' *         Ralf Böwing          Roland Hartz         *
  10. ' *         Platanenweg 4        Platanenweg 8        *
  11. ' *         4425 Billerbeck      4425 Billerbeck      *
  12. ' *                                                   *
  13. ' *****************************************************
  14.  
  15.  
  16. REM *** Daten initialisieren ***
  17.  
  18.  
  19.   LOCATE 10,25:PRINT "Bitte warten - ich lade Daten..."
  20.  
  21.   DECLARE FUNCTION Move& LIBRARY
  22.   DECLARE FUNCTION OpenDiskFont& LIBRARY
  23.   DECLARE FUNCTION xOpen& LIBRARY
  24.   DECLARE FUNCTION xRead& LIBRARY
  25.   DECLARE FUNCTION AllocMem& LIBRARY
  26.   
  27.   LIBRARY "graphics.library"
  28.   LIBRARY "diskfont.library"
  29.   LIBRARY "exec.library"
  30.   LIBRARY "dos.library"
  31.  
  32.   hw&=14675968:buffer%=5000
  33.   DEFINT zx,zy,bldnr,bldnralt,turn
  34.   DIM fw(15,2)
  35.   DIM SHARED spar%(38,38),fig%(38,38),oo%(9),ab%(9),ob%(206,24),leer%(206)
  36.   DIM SHARED st%(94),ma%(94),wa%(94),bi%(94),nam$(17),fb%(6),fganz(1)
  37.   DIM SHARED beweg%(94)
  38.   
  39.   ON ERROR GOTO fehler
  40.   
  41.   OPEN "Eriador.Grafik" FOR INPUT AS 1 LEN=buffer%
  42.     FOR j=0 TO 24
  43.       FOR i=0 TO 206
  44.         ob%(i,j)=CVI(INPUT$(2,1))
  45.       NEXT i
  46.     NEXT j
  47.   CLOSE 1
  48.  
  49.   FOR i=0 TO 206:leer%(i)=ob%(i,18):NEXT i
  50.  
  51.   GOSUB moveclr 
  52.   fganz(0)=47:fganz(1)=47
  53.   
  54.   RESTORE zofb
  55.   FOR i=0 TO 6:READ fb%(i):NEXT i  
  56. zofb:
  57.   DATA 7,4,5,14,15,2,15
  58.  
  59.   OPEN "Eriador.Spiel" FOR INPUT AS 1 LEN=buffer%
  60.   GOSUB loadcheck
  61.   IF loadjn=0 THEN CLOSE 1:GOTO okw
  62.   spm=1:loaded=1
  63.   FOR j=0 TO 38
  64.     FOR i=0 TO 38
  65.       spar%(i,j)=CVI(INPUT$(2,1))
  66.       fig%(i,j)=CVI(INPUT$(2,1))
  67.     NEXT i
  68.   NEXT j
  69.   FOR i=1 TO 94
  70.     st%(i)=CVI(INPUT$(2,1))
  71.     beweg%(i)=CVI(INPUT$(2,1))
  72.   NEXT i
  73.   turn=CVI(INPUT$(2,1))
  74.   FOR i=0 TO 1
  75.     cx%(i)=CVI(INPUT$(2,1))
  76.     cy%(i)=CVI(INPUT$(2,1))
  77.     mm%(i)=CVI(INPUT$(2,1))
  78.   NEXT    
  79.   CLOSE 1
  80.  
  81. okw:      
  82.   IF spm<>1 THEN
  83.     OPEN "Eriador.Spielfeld" FOR INPUT AS 1 LEN=buffer%
  84.       FOR j=0 TO 38
  85.         FOR i=0 TO 38
  86.           spar%(i,j)=CVI(INPUT$(2,1))
  87.         NEXT i
  88.       NEXT j
  89.     CLOSE 1  
  90.   END IF
  91.   
  92.   RESTORE bko    
  93.   FOR i=1 TO 9
  94.     READ oo%(i):READ ab%(i)
  95.   NEXT i  
  96. bko:
  97.   DATA 0,26,13,26,26,26,0,13,13,13,26,13,0,0,13,0,26,0
  98.  
  99.   RESTORE figpos:zaehl=0
  100.   FOR j=0 TO 17
  101.     READ anz
  102.     FOR i=1 TO anz
  103.       zaehl=zaehl+1
  104.       READ x,y:bi%(zaehl)=j
  105.       IF spm<>1 THEN fig%(x,y)=zaehl
  106.     NEXT i
  107.     READ nam$(j)
  108.   NEXT j
  109.  
  110. figpos:
  111.   DATA 9,8,9,10,9,9,8,18,2,20,2,19,1,20,11,22,11,21,10,"Axtmann"
  112.   DATA 9,9,9,8,8,10,8,19,2,18,1,20,1,21,11,20,10,22,10,"Schwertkämpfer"
  113.   DATA 6,7,7,11,7,17,0,21,0,19,9,23,9,"Legionär"
  114.   DATA 6,7,9,11,9,17,2,21,2,19,11,23,11,"Ritter"
  115.   DATA 6,7,8,11,8,17,1,21,1,19,10,23,10,"Schütze"
  116.   DATA 3,9,7,19,0,21,9,"Belag.Mannsch."
  117.   DATA 6,8,7,10,7,18,0,20,0,20,9,22,9,"Adler"
  118.   DATA 1,0,0,"König des Lichts"
  119.   DATA 1,4,3,"Magier"
  120.   
  121.   DATA 9,8,35,10,35,9,36,19,33,21,33,20,34,30,30,32,30,31,31,"Keulenmann"
  122.   DATA 9,9,35,8,36,10,36,20,33,19,34,21,34,31,30,30,31,32,31,"Schwertkämpfer"
  123.   DATA 6,7,37,11,37,18,35,22,35,29,32,33,32,"Legionär"
  124.   DATA 6,7,35,11,35,18,33,22,33,29,30,33,30,"Ritter"
  125.   DATA 6,7,36,11,36,18,34,22,34,29,31,33,31,"Schütze"
  126.   DATA 3,9,37,20,35,31,32,"Belag.Mannsch."
  127.   DATA 6,8,37,10,37,19,35,21,35,30,32,32,32,"Drachen"      
  128.   DATA 1,38,38,"König d. Dunkels"
  129.   DATA 1,35,34,"Magier"    
  130.  
  131.   RANDOMIZE TIMER
  132.   FOR i=1 TO 9
  133.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+5:st%(i+47)=INT(RND(1)*4)+5
  134.     ma%(i)=3:ma%(i+47)=3:wa%(i)=1:wa%(i+47)=1
  135.   NEXT i
  136.   FOR i=10 TO 18
  137.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+7:st%(i+47)=INT(RND(1)*4)+7
  138.     ma%(i)=3:ma%(i+47)=3:wa%(i)=1:wa%(i+47)=1
  139.   NEXT i      
  140.   FOR i=19 TO 24
  141.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+9:st%(i+47)=INT(RND(1)*4)+9
  142.     ma%(i)=3:ma%(i+47)=3:wa%(i)=2:wa%(i+47)=2
  143.   NEXT i      
  144.   FOR i=25 TO 30
  145.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+11:st%(i+47)=INT(RND(1)*4)+11
  146.     ma%(i)=4:ma%(i+47)=4:wa%(i)=2:wa%(i+47)=2
  147.   NEXT i      
  148.   FOR i=31 TO 36
  149.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+7:st%(i+47)=INT(RND(1)*4)+7
  150.     ma%(i)=3:ma%(i+47)=3:wa%(i)=3:wa%(i+47)=3
  151.   NEXT i      
  152.   FOR i=37 TO 39
  153.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+4:st%(i+47)=INT(RND(1)*4)+4
  154.     ma%(i)=3:ma%(i+47)=3:wa%(i)=1:wa%(i+47)=1
  155.   NEXT i      
  156.   FOR i=40 TO 45
  157.     IF spm<>1 THEN st%(i)=INT(RND(1)*4)+13:st%(i+47)=INT(RND(1)*4)+13
  158.     ma%(i)=5:ma%(i+47)=5:wa%(i)=2:wa%(i+47)=2
  159.   NEXT i      
  160.   IF spm<>1 THEN st%(46)=INT(RND(1)*4)+12:st%(93)=INT(RND(1)*4)+12
  161.   ma%(46)=3:ma%(93)=3:wa%(46)=1:wa%(93)=1
  162.   IF spm<>1 THEN st%(47)=INT(RND(1)*4)+25:st%(94)=INT(RND(1)*4)+25        
  163.   ma%(47)=4:ma%(94)=4:wa%(47)=13:wa%(94)=13
  164.  
  165.   SCREEN 1,640,256,4,2
  166.   WINDOW 2,"",,0,1
  167.  
  168.   OPEN "Eriador.Sprite" FOR INPUT AS 1
  169.     OBJECT.SHAPE 1,INPUT$(LOF(1),1)
  170.   CLOSE 1 
  171.   OBJECT.X 1,639:OBJECT.Y 1,255
  172.  
  173.  
  174.   Diskfont "garnet",16
  175.   
  176.   GOSUB farbreset
  177.   Map=0:einl=0:GOSUB TitleScreen
  178.   GOTO Spiel
  179.  
  180.  
  181. REM *** Unterprogramme und Subroutinen ***      
  182.  
  183.   SUB DigiSound (nam$,speed%,contflag%) STATIC
  184.   SHARED hw&,ad&,laenge&  
  185.     
  186.     stretch=2.4
  187.     IF nam$="Tusch" THEN stretch=0.6
  188.     IF nam$="Wuhu"  THEN stretch=2
  189.     IF nam$="Blurr" THEN stretch=1.2
  190.     IF nam$="Music" THEN
  191.       nam$="DigiSounds/"+nam$
  192.     ELSE
  193.       nam$="ram:Eriador.Sounds/"+nam$
  194.     END IF
  195.     
  196.     OPEN "I",#1,nam$
  197.       laenge&=LOF(1)
  198.     CLOSE #1
  199.     ad&=AllocMem&(laenge&,2)
  200.     IF ad&=0 THEN PRINT "Nicht genug Chip-Mem !":END
  201.   
  202.     handle&=xOpen&(SADD(nam$),1005)
  203.     erg&=xRead&(handle&,ad&,laenge&)
  204.     CALL xClose(handle&)
  205.   
  206.     POKEL hw&+160,ad&
  207.     POKEW hw&+164,INT(laenge&/2)
  208.     POKEW hw&+166,speed%
  209.     POKEW hw&+168,64
  210.   
  211.     POKEW hw&+150,32769
  212.     IF contflag%=1 THEN EXIT SUB
  213.     zeit&=INT(laenge&/speed%*stretch)
  214.     Delay(zeit&)
  215.     
  216.     POKEW hw&+150,1
  217.     POKEW hw&+168,0
  218.     CALL FreeMem(ad&,laenge&)
  219.   END SUB
  220.   
  221.   SUB Diskfont (font$,height%) STATIC
  222.     SHARED strFont&
  223.     prefs%=96
  224.     font0$=font$+".font"+CHR$(0)
  225.     IF strFont&<>0 THEN CALL CloseFont (strFont&)
  226.     textAttr&(0)=SADD(font0$)
  227.     textAttr&(1)=height%*2^16+prefs%
  228.     strFont&=OpenDiskFont& (VARPTR(textAttr&(0)))
  229.     IF strFont&<>0 THEN CALL SetFont(WINDOW(8),strFont&)
  230.   END SUB
  231.     
  232.   SUB Shadow (text$,spacing%,depth%,height%,mode%,x%,y%) STATIC
  233.     IF mode%=0 THEN
  234.       crsx%=POS(0)*height%
  235.       crsy%=(CSRLIN)*8
  236.     ELSE 
  237.       crsx%=x%:crsy%=y%
  238.     END IF
  239.     IF crsy%<8 THEN crsy%=8
  240.     CALL SetDrMd&(WINDOW(8),0)
  241.     E&=Move&(WINDOW(8),crsx%+depth%,crsy%+depth%)
  242.     COLOR 9,0
  243.     PRINT text$;
  244.     COLOR 11,0
  245.     E&=Move&(WINDOW(8),crsx%,crsy%)
  246.     PRINT text$;
  247.   END SUB
  248.   
  249.   SUB Mapon (bnr%) STATIC
  250.     SHARED zx,zy,mpjn,bldnralt
  251.     OBJECT.OFF 1
  252.     LINE (176,0)-(177,236),1,bf:LINE (177,236)-(639,236),1
  253.     LINE (0,0)-(172,236),1,b:LINE(1,0)-(171,236),1,b
  254.     LINE (0,238)-(639,253),1,b:LINE(1,238)-(638,253),1,b
  255.  
  256.     FOR i%=ab%(bnr%) TO ab%(bnr%)+12
  257.       ii%=(i%-ab%(bnr%))*18+1
  258.       FOR j%=oo%(bnr%) TO oo%(bnr%)+12                   
  259.         jj%=(j%-oo%(bnr%))*35+180
  260.         IF fig%(j%,i%)<>0 THEN PUT (jj%,ii%),ob%(0,bi%(fig%(j%,i%))),PSET:GOTO zxy
  261.         IF spar%(j%,i%)=0 THEN PUT (jj%,ii%),leer%,PSET:GOTO zxy 
  262.         PUT (jj%,ii%),ob%(0,spar%(j%,i%)+18),PSET        
  263. zxy:  NEXT j%
  264.     NEXT i%   
  265.  
  266.     mpjn=1:Zeigerset zx,zy,bnr%:OBJECT.ON 1
  267.   END SUB              
  268.  
  269.   
  270.   SUB warten (t%) STATIC
  271.     m=MOUSE(0)
  272.     t!=TIMER
  273. jgfh:
  274.     IF TIMER<=t!+t% AND MOUSE(0)=0 THEN jgfh    
  275.   END SUB
  276.  
  277.   SUB Zeigerset (x%,y%,bnr%) STATIC
  278.     OBJECT.X 1,(x%-oo%(bnr%))*35+194
  279.     OBJECT.Y 1,(y%-ab%(bnr%))*18+11
  280.   END SUB              
  281.  
  282.   SUB mclr (y%,x%) STATIC
  283.     LOCATE y%,x%
  284.     crsx%=POS(0)*9:crsy%=(CSRLIN)*8
  285.     LINE (crsx%,crsy%)-STEP(18,12),0,bf
  286.   END SUB
  287.  
  288. fehler:
  289.   IF ERR=53 THEN CLOSE 1:RESUME okw 
  290.   PRINT "Programmfehler !"
  291.   END
  292.     
  293. farbreset:
  294.   RESTORE farben:colz=15
  295.   FOR i=0 TO colz
  296.     FOR ii=0 TO 2
  297.       READ fw(i,ii)
  298.     NEXT ii
  299.   NEXT i
  300. farben:  
  301.   DATA 0,0,0,8,8,8,0,1,7,0,2,10
  302.   DATA 0,4,14,0,5,0,3,7,0,5,9,0
  303.   DATA 12,0,8,12,1,1,14,1,1
  304.   DATA 14,9,0,14,11,0,14,13,0,4,4,4,7,7,7
  305.   FOR i=0 TO colz
  306.     PALETTE i,fw(i,0)/15,fw(i,1)/15,fw(i,2)/15
  307.   NEXT  
  308.   RETURN
  309.  
  310. farbenaus:
  311.   FOR i=0 TO 15
  312.     PALETTE i,0,0,0
  313.   NEXT
  314.   RETURN
  315.   
  316. loadcheck:
  317.   CLS:LOCATE 6,17
  318.   PRINT "Es ist noch ein alter Spielstand gespeichert !"
  319.   LOCATE 8,17:PRINT "       Wünschen Sie, ihn fortzusetzen ?"
  320.   k$=UCASE$(INKEY$)
  321.   WHILE k$<>"J" AND k$<>"N"
  322.     k$=UCASE$(INKEY$)
  323.   WEND
  324.   IF k$="J" THEN
  325.     loadjn=1
  326.   ELSE
  327.     loadjn=0
  328.     CLOSE 1
  329.     KILL "Eriador.Spiel"
  330.   END IF
  331.   LOCATE 10,37:PRINT "Ok."
  332.   RETURN
  333.  
  334. groclear:
  335.   LINE (2,1)-(170,235),0,bf
  336.   RETURN
  337.   
  338. kleinclear:
  339.   LINE (2,239)-(637,253),0,bf
  340.   RETURN
  341.  
  342. tasten:  
  343.   k$=""
  344.   WHILE k$=""
  345.     k$=INKEY$
  346.   WEND  
  347.   IF k$>="1" AND k$<="9" AND bldnr=VAL(k$) THEN tasten
  348.   IF k$>="1" AND k$<="9" THEN bldnr=VAL(k$):zx=oo%(bldnr)+(zx MOD 13):zy=ab%(bldnr)+(zy MOD 13)::Mapon bldnr:GOTO tasten
  349.   IF k$=CHR$(13) AND (fig%(zx,zy)>=offs AND fig%(zx,zy)<=offs+46) AND beweg%(fig%(zx,zy))<2 THEN GOSUB genommen:RETURN
  350.  
  351.   IF UCASE$(k$)="Q" THEN
  352.     tza=15
  353.     RETURN
  354.   END IF
  355.   
  356.   IF k$=CHR$(28) AND zy>0 THEN
  357.     IF (zy MOD 13<>0) THEN 
  358.       zy=zy-1:Zeigerset zx,zy,bldnr 
  359.     ELSE
  360.       zy=zy-1:bldnr=bldnr+3:Mapon bldnr
  361.     END IF
  362.   END IF  
  363.  
  364.   IF k$=CHR$(29) AND zy<38 THEN 
  365.     IF ((zy+1) MOD 13<>0) THEN
  366.       zy=zy+1:Zeigerset zx,zy,bldnr 
  367.     ELSE
  368.       zy=zy+1:bldnr=bldnr-3:Mapon bldnr
  369.     END IF
  370.   END IF  
  371.  
  372.   IF k$=CHR$(30) AND zx<38 THEN 
  373.     IF ((zx+1) MOD 13<>0) THEN 
  374.       zx=zx+1:Zeigerset zx,zy,bldnr
  375.     ELSE 
  376.       zx=zx+1:bldnr=bldnr+1:Mapon bldnr
  377.     END IF
  378.   END IF
  379.  
  380.   IF k$=CHR$(31) AND zx>0 THEN 
  381.     IF (zx MOD 13<>0) THEN 
  382.       zx=zx-1:Zeigerset zx,zy,bldnr 
  383.     ELSE
  384.       zx=zx-1:bldnr=bldnr-1:Mapon bldnr
  385.     END IF
  386.   END IF
  387.   
  388.   IF k$=CHR$(139) THEN
  389.     DigiSound "Wuhu",428,0   
  390.     OBJECT.OFF 1
  391.     LINE (180,1)-(639,235),0,bf
  392.     LOCATE 6,1:Shadow "Legende :",9,1,9,0,0,0
  393.     LOCATE 9,1:Shadow "Ebene :",9,1,9,0,0,0:LINE (123,65)-(132,73),7,bf
  394.     LOCATE 11,1:Shadow "Wasser :",9,1,9,0,0,0:LINE (123,81)-(132,89),4,bf
  395.     LOCATE 13,1:Shadow "Wald :",9,1,9,0,0,0:LINE (123,97)-(132,105),5,bf 
  396.     LOCATE 15,1:Shadow "Gebirge :",9,1,9,0,0,0:LINE (123,113)-(132,121),14,bf
  397.     LOCATE 17,1:Shadow "Bauwerk :",9,1,9,0,0,0:LINE (123,129)-(132,137),15,bf
  398.     LOCATE 19,1:Shadow "Sumpf :",9,1,9,0,0,0:LINE (123,145)-(132,153),2,bf
  399.     LOCATE 22,1:Shadow "Helle Armee :",9,1,9,0,0,0:LINE(153,169)-(161,177),12,bf:CIRCLE (157,173),1,9
  400.     LOCATE 24,1:Shadow "Dunkle Armee :",9,1,9,0,0,0:LINE (153,185)-(161,193),3,bf:CIRCLE (157,189),1,9
  401.     FOR i%=0 TO 38
  402.     ii%=i%*6+1
  403.       FOR j%=0 TO 38  
  404.         jj%=j%*10+210
  405.         IF bi%(fig%(j%,i%))<9 THEN obf%=12 :ELSE obf%=3 
  406.         IF fig%(j%,i%)<>0 THEN
  407.           LINE (jj%,ii%)-STEP(8,4),obf%,bf
  408.           CIRCLE (jj%+4,ii%+2),1,9
  409.           GOTO abc
  410.         END IF
  411.         LINE (jj%,ii%)-STEP(8,4),fb%(spar%(j%,i%)),bf
  412. abc:  NEXT j%
  413.     NEXT i%
  414.         
  415.     LINE (338,1)-(339,233),9,b
  416.     LINE (468,1)-(469,233),9,b
  417.     LINE (210,78)-(598,78),9
  418.     LINE (210,156)-(598,156),9
  419.     
  420.     k$=INKEY$
  421.     WHILE k$<>" "
  422.       k$=INKEY$
  423.     WEND
  424.     DigiSound "Blurr",428,0
  425.     LINE (180,1)-(639,235),0,bf
  426.     GOSUB groclear
  427.     Mapon bldnr
  428.   END IF  
  429.  
  430.   IF k$=CHR$(27) THEN
  431.     DigiSound "Wuhu",428,0    
  432.     OBJECT.OFF 1
  433.     LINE (180,1)-(639,235),0,bf
  434.     GOSUB groclear
  435.     LOCATE 11,34:Shadow "Möchten Sie das Spiel",9,1,9,0,0,0
  436.     LOCATE 13,32:Shadow "(a)bbrechen,   (s)peichern",9,1,9,0,0,0
  437.     LOCATE 15,35:Shadow "oder (f)ortführen ?",9,1,9,0,0,0
  438.     k$=UCASE$(INKEY$)
  439.     WHILE k$<>"A" AND k$<>"S" AND k$<>"F"
  440.       k$=UCASE$(INKEY$)
  441.     WEND
  442.     DigiSound "Blurr",428,0
  443.     IF k$="A" THEN
  444.       warten (1)
  445.       DigiSound "Tusch",223,0
  446.       warten (2)
  447.       WINDOW CLOSE 2:SCREEN CLOSE 1
  448.       LIBRARY CLOSE:SYSTEM
  449.     END IF
  450.     IF k$="S" THEN GOSUB speichern
  451.     LINE (180,1)-(639,235),0,bf
  452.     Mapon bldnr
  453.   END IF
  454.   RETURN
  455.  
  456. genommen:
  457.   DigiSound "Wuhu",428,0
  458.   PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET
  459.   zxalt=zx:zyalt=zy:REM Ursprungskoordinaten merken
  460.   ugrnd%=spar%(zx,zy):REM Untergrund merken
  461.   f%=fig%(zx,zy):zgw=0:mpjn=0:bldnralt=bldnr
  462.   GOSUB groclear
  463.   LOCATE 5,1:Shadow nam$(bi%(f%)),9,1,9,0,0,0
  464.   LOCATE 8,1:Shadow "Stärke   :",9,1,9,0,0,0:LOCATE 8,12:Shadow STR$(st%(f%)),9,1,9,0,0,0
  465.   LOCATE 10,1:Shadow "Reichweiten",9,1,9,0,0,0
  466.   LOCATE 12,1:Shadow "- Marsch :",9,1,9,0,0,0:LOCATE 12,12:Shadow STR$(ma%(f%)),9,1,9,0,0,0
  467.   LOCATE 14,1:Shadow "- Waffen :",9,1,9,0,0,0:LOCATE 14,12:Shadow STR$(wa%(f%)),9,1,9,0,0,0
  468.   LOCATE 17,1:Shadow "Verbl. Züge :",9,1,9,0,0,0
  469. E:  
  470.   mclr 16,15:LOCATE 17,14:Shadow STR$(ma%(f%)),9,1,9,0,0,0
  471.  
  472. tsabfr:  
  473.  k$=""
  474.   WHILE k$=""
  475.     k$=INKEY$
  476.   WEND
  477.   
  478.   IF k$=CHR$(127) THEN 
  479.     zgw=0:zx=zxalt:zy=zyalt:bgl=0
  480.     IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET
  481.     GOTO E
  482.   END IF
  483.   
  484.   IF k$=CHR$(13) THEN
  485.     DigiSound "Wuhu",428,0
  486.     IF (fig%(zx,zy)<>0 AND fig%(zx,zy)<>f%) THEN
  487.       beweg%(f%)=beweg%(f%)+1:tza=tza+1
  488.       GOSUB gefecht:warten(2):GOSUB groclear
  489.       IF mpjn=0 AND freundkill=0 THEN PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET        
  490.       RETURN
  491.     END IF  
  492.     IF (bi%(f%)<>8 AND bi%(f%)<>17) OR ((bi%(f%)=8 OR bi%(f%)=17) AND spar%(zx,zy)<>3) THEN
  493.       IF (bi%(f%)<>5 AND bi%(f%)<>14) OR ((bi%(f%)=5 OR bi%(f%)=14) AND spar%(zx,zy)<>4) THEN
  494.         IF fig%(zx,zy)<>f% THEN beweg%(f%)=beweg%(f%)+1:tza=tza+1
  495.         IF mpjn=0 THEN PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,ugrnd%+18),PSET
  496.         PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(f%)),PSET
  497.         fig%(zxalt,zyalt)=0:REM alten Platz löschen
  498.         fig%(zx,zy)=f%:REM neuen Platz besetzen
  499.         cx%(spieler)=zx:cy%(spieler)=zy:mm%(spieler)=bldnr
  500.       ELSE
  501.         PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET      
  502.       END IF
  503.     ELSE
  504.       PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET      
  505.     END IF
  506.     GOSUB groclear
  507.     RETURN
  508.   END IF
  509.   IF zgw>=ma%(f%) THEN tsabfr
  510.                                                   
  511.   IF k$=CHR$(28) AND zy>0 THEN 
  512.     DigiSound "Schritt",428,0
  513.     fg%=fig%(zx,zy-1):sr%=spar%(zx,zy-1)
  514.     IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN a
  515.     IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN a
  516.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN
  517.       zgw=0:zx=zxalt:zy=zyalt:bgl=0
  518.       IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET
  519.       GOTO E
  520.     END IF
  521.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN a 
  522.     IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN
  523. a:    IF (zy MOD 13<>0) THEN 
  524.         zy=zy-1:GOSUB mapr:Zeigerset zx,zy,bldnr 
  525.       ELSE
  526.         zy=zy-1:GOSUB mapr:bldnr=bldnr+3:Mapon bldnr
  527.       END IF
  528.     END IF 
  529.   END IF   
  530.  
  531.   IF k$=CHR$(29) AND zy<38 THEN
  532.     DigiSound "Schritt",428,0
  533.     fg%=fig%(zx,zy+1):sr%=spar%(zx,zy+1)
  534.     IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48  AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN b 
  535.     IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN b
  536.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN
  537.       zgw=0:zx=zxalt:zy=zyalt:bgl=0
  538.       IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET
  539.       GOTO E
  540.     END IF    
  541.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN b
  542.     IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN
  543. b:    IF ((zy+1) MOD 13<>0) THEN
  544.         zy=zy+1:GOSUB mapr:Zeigerset zx,zy,bldnr 
  545.       ELSE
  546.         zy=zy+1:GOSUB mapr:bldnr=bldnr-3:Mapon bldnr
  547.       END IF
  548.     END IF 
  549.   END IF   
  550.  
  551.   IF k$=CHR$(30) AND zx<38 THEN
  552.     DigiSound "Schritt",428,0
  553.     fg%=fig%(zx+1,zy):sr%=spar%(zx+1,zy)
  554.     IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN c 
  555.     IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN c
  556.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN
  557.       zgw=0:zx=zxalt:zy=zyalt:bgl=0
  558.       IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET
  559.       GOTO E
  560.     END IF
  561.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN c
  562.     IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN
  563. c:    IF ((zx+1) MOD 13<>0) THEN 
  564.         zx=zx+1:GOSUB mapr:Zeigerset zx,zy,bldnr
  565.       ELSE 
  566.         zx=zx+1:GOSUB mapr:bldnr=bldnr+1:Mapon bldnr
  567.       END IF
  568.     END IF
  569.   END IF
  570.  
  571.   IF k$=CHR$(31) AND zx>0 THEN
  572.     DigiSound "Schritt",428,0
  573.     fg%=fig%(zx-1,zy):sr%=spar%(zx-1,zy)
  574.     IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN d 
  575.     IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN d
  576.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN
  577.       zgw=0:zx=zxalt:zy=zyalt:bgl=0
  578.       IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET
  579.       GOTO E
  580.     END IF
  581.     IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN d
  582.     IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN
  583. d:    IF (zx MOD 13<>0) THEN 
  584.         zx=zx-1:GOSUB mapr:Zeigerset zx,zy,bldnr 
  585.       ELSE
  586.         zx=zx-1:GOSUB mapr:bldnr=bldnr-1:Mapon bldnr
  587.       END IF
  588.     END IF
  589.   END IF
  590.  
  591.   IF UCASE$(k$)="F" AND fig%(zx,zy)=0 THEN
  592.     fg%=fig%(zxalt,zyalt):sr%=spar%(zx,zy)
  593.     IF (bi%(fg%)=5 OR bi%(fg%)=14) THEN
  594.       DigiSound "Sturz",428,0
  595.       IF sr%=6 OR sr%=4 THEN
  596.         beweg%(fg%)=beweg%(fg%)+1:tza=tza+1
  597.         spar%(zx,zy)=0
  598.         IF sr%=6 AND zx>17 AND zx<21 THEN spar%(zx,zy)=1 
  599.       END IF
  600.     END IF
  601.     PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,spar%(zx,zy)+18),PSET
  602.     IF mpjn=1 THEN zx=zxalt:zy=zyalt:Mapon bldnralt:bldnr=bldnralt:mpjn=0:bgl=0
  603.     PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET
  604.     GOSUB groclear
  605.     RETURN
  606.   END IF
  607.  
  608.   IF UCASE$(k$)="S" AND fig%(zx,zy)=0 THEN
  609.     fg%=fig%(zxalt,zyalt):sr%=spar%(zx,zy)
  610.     IF (bi%(fg%)=8 OR bi%(fg%)=17) AND sr%=3 AND st%(fg%)>8 THEN
  611.       DigiSound "Zauber",428,0
  612.       spar%(zx,zy)=0
  613.       PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,18),PSET
  614.       st%(fg%)=st%(fg%)-8
  615.       beweg%(fg%)=beweg%(fg%)+1
  616.     END IF
  617.     bgl=0
  618.     IF mpjn=1 THEN zx=zxalt:zy=zyalt:Mapon bldnralt:bldnr=bldnralt:mpjn=0
  619.     PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET     
  620.     GOSUB groclear
  621.     RETURN
  622.   END IF
  623.   GOTO tsabfr
  624.  
  625. mapr:
  626.   IF NOT (bi%(f%)=6 OR bi%(f%)=15) AND spar%(zx,zy)=2 THEN zgw=zgw+1
  627.   IF NOT (bi%(f%)=6 OR bi%(f%)=15) AND spar%(zx,zy)=5 THEN zgw=zgw+2
  628.   IF (bi%(f%)<>8 AND bi%(f%)<>17) OR ((bi%(f%)=8 OR bi%(f%)=17) AND spar%(zx,zy)<>3) THEN zgw=zgw+1 :ELSE bgl=1
  629.   mclr 16,15:LOCATE 17,14
  630.   IF zgw>=ma%(f%) THEN
  631.     Shadow " 0",9,1,9,0,0,0
  632.   ELSE
  633.     Shadow STR$(ma%(f%)-zgw),9,1,9,0,0,0
  634.   END IF
  635.   IF (spieler=0 AND fig%(zx,zy)<48 AND fig%(zx,zy)>0) OR (spieler=1 AND fig%(zx,zy)>47) THEN
  636.     LINE (5,160)-STEP(160,30),0,bf
  637.     LOCATE 21,1:Shadow nam$(bi%(fig%(zx,zy))),9,1,9,0,0,0
  638.     LOCATE 23,1:Shadow "Stärke  :  "+STR$(st%(fig%(zx,zy))),9,1,9,0,0,0
  639.   ELSE
  640.     LINE (5,160)-STEP(160,30),0,bf      
  641.   END IF
  642. RETURN  
  643.  
  644. gefecht:
  645.   DigiSound "Kampf",428,0
  646.   minsta%=3:minstb%=3:freundkill=0:feindkill=0
  647.   IF st%(f%)<minsta% THEN minsta%=INT(st%(f%)/2+0.5)
  648.   IF st%(fig%(zx,zy))<minstb% THEN minstb%=INT(st%(fig%(zx,zy))\2+0.5)   
  649.   ha%=INT(RND(1)*INT(st%(f%)/3))+minsta%:hv%=INT(RND(1)*INT(st%(fig%(zx,zy))/4))+minstb%
  650.   st%(fig%(zx,zy))=st%(fig%(zx,zy))-ha%
  651.   IF st%(fig%(zx,zy))<=0 THEN
  652.     LINE (5,160)-STEP(160,30),0,bf 
  653.     PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,spar%(zx,zy)+18),PSET
  654.     IF fig%(zx,zy)=46 THEN win=1
  655.     IF fig%(zx,zy)=93 THEN win=2
  656.     DigiSound "Lachen",428,0   
  657.     fig%(zx,zy)=0:IF spieler=0 THEN gegner=1 :ELSE gegner=0
  658.     fganz(gegner)=fganz(gegner)-1:feindkill=1
  659.     IF fganz(gegner)=0 THEN win=spieler   
  660.     RETURN
  661.   END IF
  662.   mclr 22,12:LOCATE 23,11:Shadow STR$(st%(fig%(zx,zy))),9,1,9,0,0,0
  663.   IF wa%(fig%(zx,zy))<ABS(zx-zxalt)+ABS(zy-zyalt) OR spar%(zxalt,zyalt)=3 THEN RETURN
  664.   st%(f%)=st%(f%)-hv% 
  665.   IF st%(f%)<=0 THEN 
  666.     IF mpjn=0 THEN PUT((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,spar%(zxalt,zyalt)+18),PSET
  667.     IF fig%(zxalt,zyalt)=46 THEN win=1
  668.     IF fig%(zxalt,zyalt)=93 THEN win=2
  669.     DigiSound "Lachen",428,0   
  670.     fig%(zxalt,zyalt)=0:IF spieler=0 THEN gegner=1 :ELSE gegner=0
  671.     fganz(spieler)=fganz(spieler)-1:freundkill=1
  672.     IF fganz(spieler)=0 THEN win=gegner 
  673.     RETURN
  674.   END IF
  675.   mclr 7,13:LOCATE 8,12:Shadow STR$(st%(f%)),9,1,9,0,0,0
  676. RETURN
  677.  
  678. moveclr:
  679.   FOR i=1 TO 94
  680.     beweg%(i)=0
  681.   NEXT i
  682. RETURN
  683.  
  684. speichern:
  685.   turn=spieler
  686.   OPEN "Eriador.Spiel" FOR OUTPUT AS 1 
  687.     FOR j=0 TO 38
  688.       FOR i=0 TO 38
  689.         PRINT #1,MKI$(spar%(i,j));
  690.         PRINT #1,MKI$(fig%(i,j));
  691.       NEXT i
  692.     NEXT j
  693.     FOR i=1 TO 94
  694.       PRINT #1,MKI$(st%(i));
  695.       PRINT #1,MKI$(beweg%(i));
  696.     NEXT i
  697.     PRINT #1,MKI$(turn)
  698.     FOR i=0 TO 1
  699.       PRINT #1,MKI$(cx%(i));
  700.       PRINT #1,MKI$(cy%(i));
  701.       PRINT #1,MKI$(mm%(i));
  702.     NEXT    
  703.   CLOSE 1
  704. RETURN
  705.  
  706. winscreen:
  707.   OBJECT.OFF 1
  708.   GOSUB farbenaus
  709.   CLS
  710.   Diskfont "garnet",16
  711.   LINE (150,6)-(492,39),1,bf
  712.   LINE (154,2)-(488,43),1,bf
  713.   LINE (150,6)-(492,39),6,b
  714.   LINE (154,2)-(488,43),7,b
  715.   LOCATE 3,12
  716.   Shadow "Kampf um Eriador",12,2,19,0,0,0
  717.   Diskfont "garnet",9
  718.   IF win=2 THEN
  719.     LOCATE 12,7:Shadow "Der helle König konnte die Schlacht für sich entscheiden !",9,1,9,0,0,0
  720.     LOCATE 14,2:Shadow "Das Gute hat gesiegt und das Böse wurde aus der Welt vertrieben.",9,1,9,0,0,0
  721.   ELSE
  722.     LOCATE 12,1:Shadow "Der dunkle König ist auch in der letzten Schlacht siegreich geblieben !",9,1,9,0,0,0
  723.     LOCATE 14,3:Shadow "Und so versank die Welt für den Rest des Zeitalters im Schatten.",9,1,9,0,0,0
  724.   END IF
  725.   LOCATE 17,11:Shadow "Wünschen Sie, eine weitere Partie zu spielen ?",9,1,9,0,0,0
  726.   DigiSound "Music",262,1
  727.   GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0
  728.   k$=UCASE$(INKEY$)
  729.   WHILE k$<>"J" AND k$<>"N"
  730.     k$=UCASE$(INKEY$)
  731.   WEND
  732.   GOSUB musaus
  733.   IF k$="J" THEN RUN
  734.   DigiSound "Tusch",223,0
  735.   warten (2)
  736.   WINDOW CLOSE 2:SCREEN CLOSE 1
  737.   LIBRARY CLOSE:SYSTEM
  738.   
  739. TitleScreen:  
  740.   GOSUB farbenaus
  741.   CLS
  742.   LINE (150,6)-(492,39),1,bf
  743.   LINE (154,2)-(488,43),1,bf
  744.   LINE (150,6)-(492,39),6,b
  745.   LINE (154,2)-(488,43),7,b
  746.   LOCATE 3,12
  747.   Shadow "Kampf um Eriador",12,2,19,0,0,0
  748.   Diskfont "garnet",9
  749.  
  750.   RESTORE data1:endw=23
  751.   IF loaded=1 THEN endw=22
  752.   FOR i=12 TO endw
  753.     LOCATE i,12:READ tx$:Shadow tx$,9,1,9,0,0,0
  754.   NEXT i
  755.   GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0
  756.   DigiSound "Music",262,1
  757.   IF loaded=1 THEN warten(10):GOSUB musaus:RETURN
  758.   
  759. abfr:
  760.   tx$=INKEY$
  761.   IF UCASE$(tx$)="N" THEN GOSUB musaus:RETURN
  762.   IF UCASE$(tx$)<>"J" THEN abfr
  763. data1:
  764.   DATA "Ein Fantasy - Strategiespiel für zwei Personen"," "
  765.   DATA "     nach einer Grundidee von Dirk Meier"," "," "
  766.   DATA "       Entwickelt und programmiert von"," "
  767.   DATA "    Ralf Böwing     und     Roland Hartz"," "," "," "
  768.   DATA "        Wünschen Sie eine Einleitung ?"
  769.   
  770.   GOSUB farbenaus
  771.   LINE (0,80)-(639,255),0,bf
  772.   RESTORE data2
  773.   FOR i=9 TO 26 STEP 2
  774.     LOCATE i,2:READ tx$:Shadow tx$,9,1,9,0,0,0
  775.   NEXT i
  776.   GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0
  777. data2:
  778.   DATA "In den jungen Jahren von Eglador entbrannte zum ersten Mal der"
  779.   DATA "Kampf zwischen den Herrschern des Lichts und der Finsternis."
  780.   DATA "Bisher konnte jedoch noch keine der beiden Seiten einen end-" 
  781.   DATA "gültigen Sieg erringen."
  782.   DATA " "
  783.   DATA "Aber im Jahre 6735 des zweiten Zeitalters bahnt sich das zukunfts-"
  784.   DATA "bestimmende letzte Gefecht zwischen den beiden Gegnern an. Im"
  785.   DATA "Lande Eriador entscheidet sich zwischen den verbleibenden Legionen"
  786.   DATA "das Schicksal von Eglador..."
  787.   warten (20)
  788. gh: 
  789.   CLS:GOSUB farbenaus
  790.   LOCATE 3,2:Shadow "Die helle Legion :",9,1,9,0,0,0
  791.   LOCATE 3,38:Shadow "Die dunkle Legion :",9,1,9,0,0,0
  792.   i=0
  793.   RESTORE fig
  794.   FOR y%=39 TO 224 STEP 21
  795.     LINE (18,y%+2)-(53,y%+19),1,bf
  796.     PUT (14,y%),ob%(0,i),PSET
  797.     READ d$:Shadow d$,9,1,9,1,72,y%+11
  798.     i=i+1
  799.   NEXT y%
  800.   FOR y%=39 TO 224 STEP 21
  801.     LINE (342,y%+2)-(375,y%+19),1,bf
  802.     PUT (338,y%),ob%(0,i),PSET
  803.     READ d$:Shadow d$,9,1,9,1,400,y%+11
  804.     i=i+1
  805.   NEXT y%
  806. fig:  
  807.   DATA "3 Axtmänner","3 Schwertkämpfer","2 Legionäre","2 Ritter","2 Schützen","Belagerungsmannschaft"
  808.   DATA "2 Adler","König des Lichts","Magier"
  809.   DATA "3 Keulenmänner","3 Schwertkämpfer","2 Legionäre","2 Ritter","2 Schützen","Belagerungsmannschaft"
  810.   DATA "2 Drachen","König der Finsternis","Magier"
  811.   GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0
  812.   warten (40)
  813.   GOSUB farbenaus
  814.   CLS
  815.   Shadow "Jeder Spieler verfügt über drei der gezeigten Legionen - es muß",9,1,9,1,15,31
  816.   Shadow "wohl nicht ausdrücklich erwähnt werden, daß jede Seite nur EINEN",9,1,9,1,15,45  
  817.   Shadow "König bzw. Magier hat !",9,1,9,1,15,59
  818.   Shadow "Im Folgenden sind die Landschaftselemente dargestellt :",9,1,9,1,15,88
  819.   RESTORE scene:i=18
  820.   FOR y%=107 TO 212 STEP 21
  821.     LINE (50,y%+2)-(83,y%+19),1,bf
  822.     PUT (46,y%),ob%(0,i),PSET
  823.     READ d$:Shadow d$,9,1,9,1,114,y%+11
  824.     i=i+1
  825.   NEXT y%  
  826. scene:
  827.   DATA "Ebene  -  begehbar von allen","Wasser  -  nur von Adlern und Drachen überwindbar"
  828.   DATA "Wald  -  mindert Marschgeschwindigkeit um 1 Feld","Gebirge  -  siehe Wasser"
  829.   DATA "Bauwerke  -  kann man mit Katapulten zerstören","Sumpf  -  mindert Marschgeschwindigkeit um 2 Felder"
  830.   GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0
  831.   warten (35)
  832.   GOSUB farbreset
  833.   CLS
  834.   LOCATE 2,1:Shadow "Hier die Residenz",9,1,9,0,0,0
  835.   LOCATE 4,1:Shadow "   des hellen",9,1,9,0,0,0
  836.   LOCATE 6,1:Shadow "     Königs :",9,1,9,0,0,0  
  837.   zx=0:zy=0:Mapon (7):warten (20)
  838.   CLS
  839.   LOCATE 24,1:Shadow "Hier die Residenz",9,1,9,0,0,0
  840.   LOCATE 26,1:Shadow "   des dunklen",9,1,9,0,0,0
  841.   LOCATE 28,1:Shadow "     Königs :",9,1,9,0,0,0  
  842.   zx=38:zy=38:Mapon (3):warten (20)
  843.   einl=1
  844.   GOSUB musaus
  845. RETURN
  846.   
  847. musaus:
  848.   FOR i=63 TO 0 STEP -6
  849.     POKE hw&+168,i
  850.     warten (1)
  851.   NEXT i
  852.   POKEW hw&+150,1
  853.   CALL FreeMem(ad&,laenge&)
  854. RETURN
  855.   
  856.  
  857. REM *** Spielbeginn ***
  858.  
  859. Spiel:
  860.   IF einl=0 THEN CLS:GOSUB farbreset:Mapon(3) :ELSE GOSUB groclear
  861.   IF loaded=0 THEN
  862.     Shadow "               Der dunkle König beginnt den Feldzug !",9,1,9,1,2,248
  863.   ELSE
  864.     IF turn=0 THEN zw$="dunkle König" :ELSE zw$="helle König"
  865.     Shadow "               Der "+zw$+" führt den Feldzug fort !",9,1,9,1,2,248
  866.   END IF
  867.   DigiSound "Schritt",428,0:DigiSound "Wuhu",428,0
  868.   warten (2):GOSUB kleinclear
  869.   zx=38:zy=38:bldnr=3:Zeigerset zx,zy,bldnr:spieler=turn
  870.   cx%(0)=38:cy%(0)=38:cx%(1)=0:cy%(1)=0:mm%(0)=3:mm%(1)=7:win=0
  871.  
  872. REM *** Hauptschleife des Spiels ***
  873.  
  874. Haupt:
  875.   tza=0
  876.   IF fganz(spieler)<15 THEN tzagrenze=fganz(spieler) :ELSE tzagrenze=15
  877.   DigiSound "Blurr",428,0
  878.   IF spieler=0 THEN
  879.     Shadow "                          Zugphase dunkler König",9,1,9,1,2,248:offs=48
  880.   ELSE
  881.     Shadow "                          Zugphase heller König",9,1,9,1,2,248:offs=1
  882.   END IF
  883.   warten(2):GOSUB kleinclear
  884.   zx=cx%(spieler):zy=cy%(spieler)
  885.   IF mm%(spieler)<>bldnr THEN Mapon mm%(spieler):bldnr=mm%(spieler)
  886.   Zeigerset zx,zy,bldnr:OBJECT.ON 1:GOSUB groclear:warten(1)
  887. l: 
  888.   GOSUB tasten
  889.   IF spar%(0,1)=4 AND spar%(1,0)=4 AND fganz(1)=1 THEN win=1
  890.   IF spar%(37,38)=4 AND spar%(38,37)=4 AND fganz(0)=1 THEN win=2
  891.   IF win<>0 THEN winscreen 
  892.   IF tza<tzagrenze THEN GOTO l
  893.   GOSUB moveclr
  894.   IF spieler=0 THEN spieler=1 :ELSE spieler=0
  895.   GOTO Haupt
  896.  
  897.